package com.anycl.design.behavioral.template;

import lombok.extern.slf4j.Slf4j;

/**
 * 抽象模板
 */
@Slf4j
public abstract class AbstractTemplate {

    // 模板方法
    public final void templateMethod() {
        abstractMethod();
        hookMethod();
        concreteMethod();
    }
    // 抽象方法，必须有子类实现
    protected abstract void abstractMethod();

    // 钩子方法，子类可以选择重写或者不重写
    protected void hookMethod() {

    }

    private void concreteMethod() {
        log.info("抽象类中的具体方法");
    }
}
